import { defineConfig } from 'vite'
/*
 * @Author: 鱿鱼溪学院
 * @Date: 2024-09-09 02:19:14
 * @LastEditTime: 2024-09-17 12:34:00
 * @LastEditors: 鱿鱼溪学院
 * @Description:
 * @FilePath: \yyx_admin\src\permisstion1.ts
 * Copyright 鱿鱼溪学院 by edu v1.0
 * 天道酬勤
 */

//路由鉴权，项目当中路由访问时机
import router from './router'
import nprogress from 'nprogress'
import settings from './settings'
//引入进度条样式
import 'nprogress/nprogress.css'
//去掉小圆球
nprogress.configure({ showSpinner: false })

//在组件外部同步的方式是获取不到小仓库的数据，是拿不到的，因为必须有大仓库
import pinia from './store'
import useUserStore from './store/modules/user2'
import { ElMessage } from 'element-plus'
const userStore = useUserStore(pinia)

//白名单,未登录可以访问的页面
const whiteList = ['/login', '/404']
/**
 * @description:
 * @param {any} to 你将要访问访问哪个路由
 * @param {any} from 你从哪个路由来
 * @param {any} next 是否要去？
 * @return {*}
 * @ps 全局前置守卫，项目中任意路由切换都会触发的钩子
 */
router.beforeEach(async (to: any, from: any, next: any) => {
  document.title = `${settings.title}-${to.meta.title}`
  nprogress.start()

  //console.log(userStore.hasUserInfo, 'per')

  //如果存在token，则不允许访问登录页面
  if (userStore.token) {
    if (to.path === '/login') {
      next('/')
    } else {
      //判断用户资料是否存在，如果不存在，则获取用户信息
      //登录成功访问其余留个路由（登录排除）
      if (userStore.hasUserInfo) {
        next()
      } else {
        try {
          await userStore.getUserInfo()

          next()
        } catch (error: any) {
          //token过期了，获取不到用户信息了
          //用户手动修改本地存储token
          // console.log('11')
          //   throw Error(error)
          //退出登录
          await userStore.userlogout()

          next({ path: '/login', query: { redirect: to.path } })
          ElMessage.error('token失效！')
          return Promise.reject(new Error('token失效！ '))
        }
      }
      // next()
    }
  } else {
    //2.用户未登录，只允许进入login，404等白名单页面
    if (whiteList.indexOf(to.path) > -1) {
      next()
    } else {
      next({ path: '/login' })
    }
  }
})
//全局后置守卫
router.afterEach(() => {
  nprogress.done()
})
